'use strict';

/**
 * @controller 莫凡服务端接口实例
 * @description 由于云应用的调用会自动在query里面添加参数,因此在使用get接口时,参数验证需要单独去做
 * @description 云应用开发:https://miniapp.open.taobao.com/docV3.htm?docId=118538&docType=1&tag=dev
 */

const Controller = require('egg').Controller;

class template extends Controller {

    /**
     * 示例接口：GET
     * @summary 获取用户信息
     * @description 获取用户信息
     * @router get /dev/api/v1/test
     * @request query string *user_id 用户id 必填
     * @response 200 BasiCode 返回结果
     */
    async insert() {
        const {
            ctx,
        } = this;
        try {
            console.log("================================")
            console.log(ctx.request.query)
            // 参数验证 系统参数标准验证
            const Joi = ctx.app.Joi;
            const schema = Joi.object().keys({
                template_id: Joi.string().required(),
                template_version: Joi.string().required(),
                pre_img: Joi.string().required(),
                pre_url: Joi.string().required(),
                template_name: Joi.string().required(),
            });
            let params = ctx.request.body
            // GET接口需要单独提出参数进行验证,不然需要写上所有的参数
            ctx.validate(schema, params);
            console.log("================================")
            // 业务处理

            const retObj = await ctx.service.templateService.insert(params);

            ctx.body = await ctx.helper.basicode(0, retObj);
        } catch (e) {
            // 返回异常
            ctx.body = await ctx.helper.basicode(e.code || 8000, e);
        }
    }

    async findAll() {
        const {
            ctx,
        } = this;
        try {
            console.log("================================")
            console.log(ctx.request.query)
            // 参数验证 系统参数标准验证
            const Joi = ctx.app.Joi;
            const schema = Joi.object().keys({
                user_nick: Joi.string().required(),
                mix_nick: Joi.string().required(),
                open_id: Joi.string().required(),
                access_token: Joi.string().required(),
                source_app_id: Joi.string(),
                app_key: Joi.string(),
                mini_app_id: Joi.string(),
                env: Joi.string(),
                request_id: Joi.string(),
                sign: Joi.string(),
                source_ip: Joi.string(),
                curPage: Joi.number(), 
                page_size: Joi.number(),  
            });
            // GET接口需要单独提出参数进行验证,不然需要写上所有的参数
            ctx.validate(schema, ctx.request.query);
            console.log("================================")
            // 业务处理
            const retObj = await ctx.service.templateService.findAll(ctx.request.query);

            ctx.body = await ctx.helper.basicode(0, retObj);
        } catch (e) {
            // 返回异常
            ctx.body = await ctx.helper.basicode(e.code || 8000, e);
        }
    }

    async update() {
        const {
            ctx,
        } = this;
        try {
            console.log("================================")
           
            // 参数验证 系统参数标准验证
            const Joi = ctx.app.Joi;
            const schema = Joi.object().keys({
                template_id: Joi.string().required(),
                template_version: Joi.string().required(),
                pre_img: Joi.string().required(),
                pre_url: Joi.string().required(),
                id: Joi.number().required(),
                template_name: Joi.string().required(),
            });
            let params = ctx.request.body
            console.log(ctx.request.body)
            // GET接口需要单独提出参数进行验证,不然需要写上所有的参数
            ctx.validate(schema, params);
            console.log("================================")
            // 业务处理
            const retObj = await ctx.service.templateService.update(params);

            ctx.body = await ctx.helper.basicode(0, retObj);
        } catch (e) {
            // 返回异常
            ctx.body = await ctx.helper.basicode(e.code || 8000, e);
        }
    }

    
    async delete() {
        const {
            ctx,
        } = this;
        try {
            console.log("================================")
            console.log(ctx.request.query)
            // 参数验证 系统参数标准验证
            const Joi = ctx.app.Joi;
            const schema = Joi.object().keys({
                id: Joi.number().required(),
            });
            let params = ctx.request.body;
            
            // GET接口需要单独提出参数进行验证,不然需要写上所有的参数
            ctx.validate(schema, params);
            console.log("================================")
            // 业务处理
            const retObj = await ctx.service.templateService.delete(params);

            ctx.body = await ctx.helper.basicode(0, retObj);
        } catch (e) {
            // 返回异常
            ctx.body = await ctx.helper.basicode(e.code || 8000, e);
        }
    }

    /**
     * 示例接口：POST
     * @summary 删除用户
     * @description 删除用户
     * @router post /dev/api/v1/testPost
     * @request body testRequest *body user_id:用户ID 必填
     * @response 200 BasiCode 返回结果
     */
    async testPost() {
        const {
            ctx,
        } = this;
        try {
            // 参数验证 系统参数标准验证
            const Joi = ctx.app.Joi;
            const schema = Joi.object().keys({
                user_id: Joi.string().required(),
            });
            const user_id = ctx.request.body.user_id;
            ctx.validate(schema, {
                user_id,
            });
            // 业务处理
            const retObj = await ctx.service.demoService.testPost(user_id);
            // 返回结果
            ctx.body = await ctx.helper.basicode(0, retObj);
        } catch (e) {
            const resp = await ctx.helper.basicode(e.code || 8000, e);
            ctx.body = resp;
        }
    }
}

module.exports = template;